#!/bin/bash

set -e

# 当前路径与服务名识别
cur_path=$(pwd)
PROJECT_NAME=$(basename "$cur_path")   # 项目目录名
PROC_NAME=$(basename "$cur_path")

echo "📂 当前项目目录: $PROJECT_NAME"
echo "⚙️  服务名称: $PROC_NAME"

cur_time=$(date +"%Y%m%d%H%M")
VERSION=$1-v1.${cur_time}
echo "📦 版本号: $VERSION"

# 构建模式：cloud 或 local，默认 cloud
BUILD_TARGET=${BUILD_TARGET:-cloud}

echo "🚀 构建模式: ${BUILD_TARGET}"

if [ "$BUILD_TARGET" = "local" ]; then
  echo "🔧 本地模式构建：生成本地镜像并保存"
  # 本地构建：固定标签，不使用版本号
  docker build -f ./dockerfile/$2.dockerfile -t "${PROJECT_NAME}:latest" .
  # 确保目标目录存在
  mkdir -p /Users/jfkj/本地/local-docker-iso
  # 导出镜像为 tar 包（使用项目目录名作为文件名）
  docker save "${PROJECT_NAME}:latest" -o "/Users/jfkj/本地/local-docker-iso/${PROJECT_NAME}.tar"
  echo "✅ 本地镜像已保存至 /Users/jfkj/本地/local-docker-iso/${PROJECT_NAME}.tar"
  exit 0
fi

# cloud 模式逻辑
# shellcheck disable=SC1090
source ~/.env.sh
echo "🌐 Cloud 模式构建：登录并推送至远程仓库"
docker login -u "${ALI_USER}" -p "${ALI_PASSWORD}" "${ALI_DOMAIN}"

# 更新nginx配置到相应环境（仅调试用）
cat ./nginx.conf

echo "🔨 docker build -f ./dockerfile/$2.dockerfile -t ${PROC_NAME}:${VERSION} ."
docker buildx build -f ./dockerfile/$2.dockerfile --platform linux/amd64 -t "${PROC_NAME}:${VERSION}" .

image_id=$(docker images | grep "${PROC_NAME}" | grep "${VERSION}" | grep -v registry | awk '{print $3}')
echo "🆔 构建完成，镜像ID: $image_id"

echo "🏷️  打标签并推送到远程仓库"
docker tag "${image_id}" "${ALI_DOMAIN}/${ALI_SPACE}/${PROC_NAME}:${VERSION}"
docker tag "${image_id}" "${ALI_DOMAIN}/${ALI_SPACE}/${PROC_NAME}:last"

docker push "${ALI_DOMAIN}/${ALI_SPACE}/${PROC_NAME}:${VERSION}"
docker push "${ALI_DOMAIN}/${ALI_SPACE}/${PROC_NAME}:last"

# 删除本地镜像tag
docker rmi "${ALI_DOMAIN}/${ALI_SPACE}/${PROC_NAME}:${VERSION}" || true
docker rmi "${ALI_DOMAIN}/${ALI_SPACE}/${PROC_NAME}:last" || true

# 删除本地镜像
docker rmi "${PROC_NAME}:${VERSION}" || true
docker rmi "${PROC_NAME}:last" || true

echo "✅ Cloud 模式构建并推送完成"
